// 规定在一个单位时间内，只能触发一次函数。如果这个单位时间内触发多次函数，只有一次生效。
// 节流重在加锁flag = false
// 应用场景：
// scroll滚动事件，每隔特定描述执行回调函数
// input输入框，每个特定时间发送请求或是展开下拉列表，（防抖也可以）
function throttle (fn, delay) {
    let flag = true
    return (...args) => {
        if (!flag) return
        flag = false
        setTimeout(() => {
            fn.apply(this, args)
            flag = true
        }, delay)
    }
}

// Test
function f1 (a) {
    console.log(123, '+', a)
}

const throttleFn = throttle(f1, 300)
throttleFn(1)
throttleFn(2)
throttleFn(3)
setTimeout(() => {
    throttleFn(4)
}, 500)
